# info_extractor信息抽取可视化界面:自动摘要，关键词提取和情感分析
# from django.shortcuts import render

# Create your views here.
from django.shortcuts import render
from pyhanlp import HanLP
import os
from pyhanlp import SafeJClass

example = ("水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露，"
           "根据刚刚完成了水资源管理制度的考核，有部分省接近了红线的指标，有部分省超过红线的指标。"
           "对一些超过红线的地方，陈明忠表示，对一些取用水项目进行区域的限批，严格地进行水资源论证和取水许可的批准。")


# 自动摘要
def summarize_view(request):
    user_input = example  # 默认输入
    summary = []
    num = 3  # 默认关键词数量
    show_result = False

    if request.method == 'POST':
        show_result = True
        text = request.POST['text']
        num_input = request.POST.get('num', 5)  # 获取用户输入的关键词数量
        try:
            num = max(1, int(num_input))  # 确保至少为1
        except ValueError:
            num = 5  # 如果转换失败，使用默认值

        user_input = text
        if text:
            summary = HanLP.extractSummary(user_input, num)

    return render(request, 'info_extractor/summarize.html', {
        'summary': summary,
        'user_input': user_input,
        'num': num,
        'show_result': show_result,
    })


def keyword_view(request):
    user_input = example  # 默认输入
    keywords = []
    num = 5  # 默认关键词数量
    show_result = False

    if request.method == 'POST':
        show_result = True
        text = request.POST['text']
        num_input = request.POST.get('num', 5)  # 获取用户输入的关键词数量
        try:
            num = max(1, int(num_input))  # 确保转换为整数且至少为1 #
        except ValueError:
            num = 5  # 如果转换失败，使用默认值

        user_input = text
        if text:
            keywords = HanLP.extractKeyword(user_input, num)

    return render(request, 'info_extractor/keyword.html', {
        'keywords': keywords,
        'user_input': user_input,
        'num': num,
        'show_result': show_result,
    })


def sentiment_view(request):
    NaiveBayesClassifier = SafeJClass('com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier')
    IOUtil = SafeJClass('com.hankcs.hanlp.corpus.io.IOUtil')
    current_dir = os.path.dirname(__file__)
    model_path = os.path.join(current_dir, 'ChnSentiCorp.ser')
    classifier = NaiveBayesClassifier(IOUtil.readObjectFrom(model_path))

    initial_example = ('经过漫长的诉讼，最终我得到了公正的裁决，心中的不安终于得以释然，感到一种久违的平静与安慰。\n'
                       '尽管法官作出了判决，但我内心充满了无法释怀的失望，因为这场官司并没有为我带来真正的公平与正义。\n'
                       '法院的判决让我得到了某种程度的公正，但心中的愤怒和对过去事件的痛苦依然挥之不去，仿佛胜利并未治愈一切创伤。')
    user_input = initial_example  # 默认输入
    sentiment = []
    show_result = False

    if request.method == 'POST':
        show_result = True
        text = request.POST['text']
        user_input = text
        # 使用 nltk 进行句子分割
        sentences = text.split('\n')

        for sentence in sentences:
            classification = classifier.classify(sentence)
            probabilities = classifier.predict(sentence)
            sentiment.append({
                'sentence': sentence,
                'classification': classification,
                'positive': probabilities['正面'],
                'negative': probabilities['负面']
            })
    # 为图表准备数据
    positive_values = [s['positive'] for s in sentiment]
    negative_values = [s['negative'] for s in sentiment]
    labels = [s['sentence'] for s in sentiment]

    return render(request, 'info_extractor/sentiment.html', {
        'sentiment': sentiment,
        'user_input': user_input,
        'show_result': show_result,
        'positive_values': positive_values,
        'negative_values': negative_values,
        'labels': labels,
    })
